package cn.harry.modular.sys.service;

import cn.harry.modular.sys.domain.SysUser;
import cn.harry.modular.sys.vo.LoginResult;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * 后台用户表
 *
 * @author honghh Date 2019-10-12 10:55:44 Copyright (C) www.tech-harry.cn
 */
public interface SysUserService extends IService<SysUser> {

	/**
	 * 根据用户名获取后台管理员
	 * @param username 用户名
	 * @return cn.harry.modular.sys.entity.SysUser
	 */
	SysUser getByUsername(String username);

	/**
	 * 登录功能
	 * @param username 用户名
	 * @param password 密码
	 * @return 生成的JWT的token
	 */
	LoginResult login(String username, String password);

	/**
	 * 刷新token的功能
	 * @param oldToken 旧的token
	 * @return String
	 */
	String refreshToken(String oldToken);

	/**
	 * 根据用户id获取用户
	 * @param userId
	 * @return
	 */
	SysUser getUserById(Long userId);

	/**
	 * 修改指定用户信息
	 * @param id
	 * @param admin
	 * @return
	 */
	int update(Long id, SysUser admin);

	/**
	 * 分页获取数据
	 * @param params
	 * @return
	 */
	IPage<SysUser> getPage(Map<String, Object> params);

	/**
	 * 更新用户以及权限
	 * @param user
	 * @return
	 */
	int updateUserAndRole(SysUser user);

	/**
	 * 修改密码
	 * @param userId 用户ID
	 * @param newPassword 新密码
	 * @return
	 */
	boolean updatePasswordByUserId(Long userId, String newPassword);

	/**
	 * 修改用户状态
	 * @param id
	 * @param status
	 * @return
	 */
	boolean updateStatus(Long id, String status);

	/**
	 * 创建用户及权限
	 * @param user
	 * @return
	 */
	boolean insertUserAndRole(SysUser user);

	/**
	 * 批量删除用户
	 * @param ids
	 * @return
	 */
	boolean deleteByIds(Long[] ids);

	/**
	 * 导出
	 * @param params
	 * @return
	 */
	List<SysUser> getExportList(Map<String, Object> params);

	/**
	 * 更新用户
	 * @param user
	 * @return
	 */
	boolean updateUser(SysUser user);

	/**
	 * 创建用户
	 * @param user
	 * @return
	 */
	boolean createUser(SysUser user);

}
